package com.seeTools.next.common.core;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @author xiaotong
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLimit {
    /**
     * 资源KEY
     * 不同的接口，使用不同的流量限制，如果key一样，则共用相同的流量池
     */
    String key() default "DefaultRateLimiterKey";

    /**
     * 请求限流时的提示语
     */
    String msg() default "温馨提示：系统繁忙，请稍后再试！";

    /**
     * 获取令牌的最大等待时间单位（分钟/秒/毫秒）默认为毫秒
     */
    TimeUnit timeunit() default TimeUnit.MILLISECONDS;

    /**
     * 获取令牌最大等待时间
     */
    long timeout();

    /**
     * 每秒最多访问次数，也就是最大并发数
     */
    double permitsPerSecond();
}
